package com.kobeliu.entity;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.PriorityQueue;

/**
 * LeetCode 786
 * 困难题
 *
 * 第 K 个最小的素数分数
 *
 * 给你一个按递增顺序排序的数组 arr 和一个整数 k 。数组 arr 由 1 和若干 素数  组成，且其中所有整数互不相同。
 *
 * 对于每对满足 0 < i < j < arr.length 的 i 和 j ，可以得到分数 arr[i] / arr[j] 。
 *
 * 那么第 k 个最小的分数是多少呢?  以长度为 2 的整数数组返回你的答案, 这里 answer[0] == arr[i] 且 answer[1] == arr[j] 。
 *
 *
 * 示例 1：
 * 输入：arr = [1,2,3,5], k = 3
 * 输出：[2,5]
 * 解释：已构造好的分数,排序后如下所示:
 * 1/5, 1/3, 2/5, 1/2, 3/5, 2/3
 * 很明显第三个最小的分数是 2/5
 *
 * 示例 2：
 * 输入：arr = [1,7], k = 1
 * 输出：[1,7]
 */

public class Demo_60_No786 {
    public static void main(String[] args) {


    }

    public int[] kthSmallestPrimeFraction(int[] arr, int k) {
        PriorityQueue<int[]> queues = new PriorityQueue<>((o1, o2) -> o1[0]*o2[1] - o1[1]*o2[0]);

        for (int i = 1; i < arr.length; i++) {
            queues.add(new int[]{arr[0],arr[i]});
        }
        int i = 0;
        while (i<k-1){
            int[] poll = queues.poll();
            for (int j = 0; j < arr.length; j++) {
                if(poll!=null) {
                    if(arr[j] == poll[0]){
                        queues.add(new int[]{arr[j+1],poll[1]});
                        break;
                    }
                }
            }
            i++;
        }
        return queues.poll();
    }
}
